#pragma once

#include <functional>
#include <string>
#include <vector>

namespace cuda_play {
namespace utils {

class Task {
public:
  Task(std::function<void()> &&func);

  void operator()() { inner_func_(); }

private:
  std::function<void()> inner_func_;
};
class Benchmark {
public:
  void add_task(Task &&task, std::string task_name = "");

  void run();

private:
  std::vector<std::pair<std::string, Task>> tasks_;
  std::string output_;
};
} // namespace utils
} // namespace cuda_play